//Clase que extiende de herramienta, en este caso un circulo
public class Circulo extends Herramienta{
  
  private int resRadio=-1;
  private int estado = 0;
  
  
  //Constructor
  public Circulo(int posicionx,int posiciony,int altoherramienta,int anchoherramienta,String nombre){
   this.posicionx=posicionx;
   this.posiciony=posiciony;
   this.anchoherramienta = anchoherramienta;
   this.altoherramienta = altoherramienta;
   this.nombre=nombre;
   
  }
  public int getTipo(){
    return 2;
  }
  //Seteamos la restriccion de radio de la etiqueta
  public void setRadio(int resRadio){
    this.resRadio = resRadio;
  }
  
  //Funcion que se ejecuta al presionar el raton
  public boolean mousePressed(int offsetx,int offsety,float zoom,float zoomy,float dragX,float dragY){
   if(mouseButton == LEFT){
    //Miramos si es el primer o segundo click del raton para empezar o acabar de dibujar la etiqueta
    switch(estado){
    case 0:
      x=(int)((((mouseX-dragX) -((width-offsetx)/2.0))/zoom));
      y=(int)((((mouseY-dragY) -((height-offsety)/2.0))/zoomy));
      println("dibujo");
      estado++;
      return false;
      case 1:
      int x2 =(int)((((mouseX-dragX)-(width-offsetx)/2)/zoom));
      int y2 =(int)((((mouseY-dragY)-(height-offsety)/2)/zoomy)); 
      int radio = resRadio!= -1? resRadio:abs((int)sqrt(pow((int)(x2-x),2)+pow((int)(y2-y),2)));
      lastEtiqueta = new Etiqueta(x,y,radio,nombre);
      estado=0;
      return true;
      
   } 
   return false;
  }
  return false;
  }
  
  
  
    //Getter del texto que se muestra como ayuda
    public String getTextoHelper1(){
     StringBuffer s = new StringBuffer();
     s.append(nombre+" label, circle");
     if(resRadio != -1){
     s.append(" width allways "+resRadio+" pixels of radi");}
         
     return s.toString();
 }
 
 
 //Geter del texto que se muestra como segunda ayuda
 public String getTextoHelper2(){
 return "CIRCLE MODE: Make two clicks to define the label, one for the coordinates and one for the proporcions";
}

//Funcion que muestra en tiempo real como quedara la etiqueta finalizada
public void displayEstado(int offsetx,int offsety,float zoom,float zoomy,float dragX,float dragY){
    
   if(estado==1){
     noFill();
     int x2 =(int)((((mouseX-dragX)-(width-offsetx)/2)/zoom));
      int y2 =(int)((((mouseY-dragY)-(height-offsety)/2)/zoomy)); 
      int radio = resRadio!= -1? resRadio:abs((int)sqrt(pow((int)(x2-x),2)+pow((int)(y2-y),2)));
      
    ellipse(((x)*zoom+dragX)+((width-offsetx)/2),((y)*zoomy+dragY)+((height-offsety)/2),radio*2*zoom,radio*2*zoomy);
  }
  
}
}
